package com.itljm.cxrMarket.utils;

import com.itljm.cxrMarket.entity.SysPermission;
import java.util.*;


/**
 * @author ljm
 * @date 2025/4/2 21:35
 */
public class TreeUtil {
    /**
     * 将一维数组转换为树形结构
     * @param list 一维权限列表
     * @return 根节点列表
     */
    public static List<SysPermission> listToTree(List<SysPermission> list) {
        if (list == null || list.isEmpty()) {
            return new ArrayList<>();
        }

        // 1. 使用Map存储所有节点，便于快速查找
        Map<Long, SysPermission> nodeMap = new HashMap<>();
        list.forEach(node -> {
            nodeMap.put(node.getId(), node);
            node.setChildren(new ArrayList<>()); // 初始化children
        });

        // 2. 遍历所有节点，建立父子关系
        List<SysPermission> rootNodes = new ArrayList<>();
        for (SysPermission node : list) {
            Long parentId = node.getParentId();
            if (parentId == 0L) { // 根节点
                rootNodes.add(node);
            } else {
                SysPermission parent = nodeMap.get(parentId);
                if (parent != null) {
                    parent.getChildren().add(node);
                }
            }
        }
        return rootNodes;
    }
}
